package 时间类

// SetLayout sets globally default layout.
// 设置全局默认布局模板
func X设置全局默认布局模板(layout string) *Carbon {
	c := X创建().X设置布局模板(layout)
	if !c.X是否有错误() {
		DefaultLayout = layout
	}
	return c
}

// SetFormat sets globally default format.
// 设置全局默认格式模板
func X设置全局默认格式模板(format string) *Carbon {
	layout := format2layout(format)
	c := X创建().X设置布局模板(layout)
	if !c.X是否有错误() {
		DefaultLayout = layout
	}
	return c
}

// SetTimezone sets globally default timezone.
// 设置全局默认时区
func X设置全局默认时区(时区 string) *Carbon {
	c := X创建().X设置时区(时区)
	if !c.X是否有错误() {
		DefaultTimezone = 时区
	}
	return c
}

// SetLocation sets globally default location.
// 设置全局默认位置
func X设置全局默认位置(位置 *X时区) *Carbon {
	c := X创建().X设置位置(位置)
	if !c.X是否有错误() {
		DefaultTimezone = 位置.String()
	}
	return c
}

// SetLocale sets globally default locale.
// 设置全局默认语言区域
func X设置全局默认语言区域(语言区域 string) *Carbon {
	c := X创建().X设置语言区域(语言区域)
	if !c.X是否有错误() {
		DefaultLocale = 语言区域
	}
	return c
}

// SetWeekStartsAt sets globally default start day of the week.
// 设置全局默认周起始日期
func X设置全局默认周起始日期(weekday X星期) *Carbon {
	c := X创建().X设置一周起始日期(weekday)
	if !c.X是否有错误() {
		DefaultWeekStartsAt = weekday
	}
	return c
}

// SetWeekendDays sets globally default weekend days of the week.
// 设置全局默认一周周末日期
func X设置全局默认一周周末日期(weekDays []X星期) *Carbon {
	c := X创建().X设置一周周末日期(weekDays)
	if !c.X是否有错误() {
		DefaultWeekendDays = weekDays
	}
	return c
}

// SetLayout sets layout.
// 设置布局模板
func (c *Carbon) X设置布局模板(模板 string) *Carbon {
	if 模板 == "" {
		c.X错误 = X错误_布局模板_空()
	}
	if c.X是否为无效时间() {
		return c
	}
	c.layout = 模板
	return c
}

// SetFormat sets format.
// 设置格式模板
func (c *Carbon) X设置格式模板(模板 string) *Carbon {
	if 模板 == "" {
		c.X错误 = X错误_格式模板_空()
	}
	if c.X是否为无效时间() {
		return c
	}
	c.layout = format2layout(模板)
	return c
}

// SetTimezone sets timezone.
// 设置时区
func (c *Carbon) X设置时区(时区 string) *Carbon {
	if 时区 == "" {
		c.X错误 = X错误_空时区()
	}
	if c.X是否为无效时间() {
		return c
	}
	c.loc, c.X错误 = parseTimezone(时区)
	return c
}

// SetLocation sets location.
// 设置位置
func (c *Carbon) X设置位置(位置 *X时区) *Carbon {
	if 位置 == nil {
		c.X错误 = X错误_空指针位置()
	}
	if c.X是否为无效时间() {
		return c
	}
	c.loc = 位置
	return c
}

// SetLocale sets locale.
// 设置语言区域
func (c *Carbon) X设置语言区域(语言区域 string) *Carbon {
	if 语言区域 == "" {
		c.X错误 = X错误_空语言环境()
	}
	if c.X是否为无效时间() {
		return c
	}
	c.lang = X创建语言().X设置区域(语言区域)
	c.X错误 = c.lang.Error
	return c
}

// SetWeekStartsAt sets start day of the week.
// 设置一周起始日期
func (c *Carbon) X设置一周起始日期(weekDay X星期) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	c.weekStartsAt = weekDay
	return c
}

// SetWeekendDays sets weekend days of the week.
// 设置一周周末日期
func (c *Carbon) X设置一周周末日期(weekDays []X星期) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	c.weekendDays = weekDays
	return c
}

// SetLanguage sets language.
// 设置语言对象
func (c *Carbon) X设置语言对象(语言 *X语言) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	if 语言 == nil {
		c.X错误 = X错误_空指针语言()
		return c
	}
	c.lang.dir = 语言.dir
	c.lang.locale = 语言.locale
	c.lang.resources = 语言.resources
	c.lang.Error = 语言.Error
	return c
}

// SetDateTime sets year, month, day, hour, minute and second.
// 设置年、月、日、时、分、秒
func (c *Carbon) X设置年月日时分秒(年, 月, 日, 时, 分, 秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	return create(年, 月, 日, 时, 分, 秒, c.X取纳秒(), c.X取时区位置())
}

// SetDateTimeMilli sets year, month, day, hour, minute, second and millisecond.
// 设置年、月、日、时、分、秒、毫秒
func (c *Carbon) X设置年月日时分秒毫秒(年, 月, 日, 时, 分, 秒, 毫秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	return create(年, 月, 日, 时, 分, 秒, 毫秒*1e6, c.X取时区位置())
}

// SetDateTimeMicro sets year, month, day, hour, minute, second and microsecond.
// 设置年、月、日、时、分、秒、微秒
func (c *Carbon) X设置年月日时分秒微秒(年, 月, 日, 时, 分, 秒, microsecond int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	return create(年, 月, 日, 时, 分, 秒, microsecond*1e3, c.X取时区位置())
}

// SetDateTimeNano sets year, month, day, hour, minute, second and nanosecond.
// 设置年、月、日、时、分、秒、纳秒
func (c *Carbon) X设置年月日时分秒纳秒(年, 月, 日, 时, 分, 秒, 纳秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	return create(年, 月, 日, 时, 分, 秒, 纳秒, c.X取时区位置())
}

// SetDate sets year, month and day.
// 设置年、月、日
func (c *Carbon) X设置年月日(年, 月, 日 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	hour, minute, second := c.X取时分秒()
	return create(年, 月, 日, hour, minute, second, c.X取纳秒(), c.X取时区位置())
}

// SetDateMilli sets year, month, day and millisecond.
// 设置年、月、日、毫秒
func (c *Carbon) X设置年月日毫秒(年, 月, 日, 毫秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	hour, minute, second := c.X取时分秒()
	return create(年, 月, 日, hour, minute, second, 毫秒*1e6, c.X取时区位置())
}

// SetDateMicro sets year, month, day and microsecond.
// 设置年、月、日、微秒
func (c *Carbon) X设置年月日微秒(年, 月, 日, 微秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	hour, minute, second := c.X取时分秒()
	return create(年, 月, 日, hour, minute, second, 微秒*1e3, c.X取时区位置())
}

// SetDateNano sets year, month, day and nanosecond.
// 设置年、月、日、纳秒
func (c *Carbon) X设置年月日纳秒(年, 月, 日, 纳秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	hour, minute, second := c.X取时分秒()
	return create(年, 月, 日, hour, minute, second, 纳秒, c.X取时区位置())
}

// SetTime sets hour, minute and second.
// 设置时、分、秒
func (c *Carbon) X设置时分秒(时, 分, 秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, day := c.X取年月日()
	return create(year, month, day, 时, 分, 秒, c.X取纳秒(), c.X取时区位置())
}

// SetTimeMilli sets hour, minute, second and millisecond.
// 设置时、分、秒、毫秒
func (c *Carbon) X设置时分秒毫秒(时, 分, 秒, 毫秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, day := c.X取年月日()
	return create(year, month, day, 时, 分, 秒, 毫秒*1e6, c.X取时区位置())
}

// SetTimeMicro sets hour, minute, second and microsecond.
// 设置时、分、秒、微秒
func (c *Carbon) X设置时分秒微秒(时, 分, 秒, 微秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, day := c.X取年月日()
	return create(year, month, day, 时, 分, 秒, 微秒*1e3, c.X取时区位置())
}

// SetTimeNano sets hour, minute, second and nanosecond.
// 设置、时、分、秒、纳秒
func (c *Carbon) X设置时分秒纳秒(时, 分, 秒, 纳秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, day := c.X取年月日()
	return create(year, month, day, 时, 分, 秒, 纳秒, c.X取时区位置())
}

// SetYear sets year.
// 设置年份
func (c *Carbon) X设置年份(年 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	_, month, day, hour, minute, second := c.X取年月日时分秒()
	return create(年, month, day, hour, minute, second, c.X取纳秒(), c.X取时区位置())
}

// SetYearNoOverflow sets year without overflowing month.
// 设置年份(月份不溢出)
func (c *Carbon) X设置年份并月份不溢出(年 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	return c.X增加N年并不溢出月份(年 - c.X取年())
}

// SetMonth sets month.
// 设置月份
func (c *Carbon) X设置月份(月 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, _, day, hour, minute, second := c.X取年月日时分秒()
	return create(year, 月, day, hour, minute, second, c.X取纳秒(), c.X取时区位置())
}

// SetMonthNoOverflow sets month without overflowing month.
// 设置月份(月份不溢出)
func (c *Carbon) X设置月份并月份不溢出(月 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	return c.X增加N个月并不溢出月份(月 - c.X取月())
}

// SetDay sets day.
// 设置日期
func (c *Carbon) X设置日期(日 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, _, hour, minute, second := c.X取年月日时分秒()
	return create(year, month, 日, hour, minute, second, c.X取纳秒(), c.X取时区位置())
}

// SetHour sets hour.
// 设置小时
func (c *Carbon) X设置小时(时 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, day, _, minute, second := c.X取年月日时分秒()
	return create(year, month, day, 时, minute, second, c.X取纳秒(), c.X取时区位置())
}

// SetMinute sets minute.
// 设置分钟
func (c *Carbon) X设置分(分 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, day, hour, _, second := c.X取年月日时分秒()
	return create(year, month, day, hour, 分, second, c.X取纳秒(), c.X取时区位置())
}

// SetSecond sets second.
// 设置秒数
func (c *Carbon) X设置秒(秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, day, hour, minute, _ := c.X取年月日时分秒()
	return create(year, month, day, hour, minute, 秒, c.X取纳秒(), c.X取时区位置())
}

// SetMillisecond sets millisecond.
// 设置毫秒
func (c *Carbon) X设置毫秒(毫秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, day, hour, minute, second := c.X取年月日时分秒()
	return create(year, month, day, hour, minute, second, 毫秒*1e6, c.X取时区位置())
}

// SetMicrosecond sets microsecond.
// 设置微秒
func (c *Carbon) X设置微秒(微秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, day, hour, minute, second := c.X取年月日时分秒()
	return create(year, month, day, hour, minute, second, 微秒*1e3, c.X取时区位置())
}

// SetNanosecond sets nanosecond.
// 设置纳秒
func (c *Carbon) X设置纳秒(纳秒 int) *Carbon {
	if c.X是否为无效时间() {
		return c
	}
	year, month, day, hour, minute, second := c.X取年月日时分秒()
	return create(year, month, day, hour, minute, second, 纳秒, c.X取时区位置())
}
